package com.estatistica.controle;

import java.text.DecimalFormat;

import com.estatistica.entidade.DadosFrequencia;
import com.estatistica.util.Util;

public class DadosFrequenciaControle {

	private DadosFrequencia dadosFrequencia;

	public DadosFrequencia getDadosFrequencia() {
		return dadosFrequencia;
	}

	public void setDadosFrequencia(DadosFrequencia dadosFrequencia) {
		this.dadosFrequencia = dadosFrequencia;
	}

	public int[] getValoresFi(int[] dados, int n, int h, int k) {
		int vetor[] = new int[k];
		int iter = dados[0];
		for (int i = 0; i < k; i++) {
			for (int j = 0; j < n; j++) {
				if (dados[j] >= iter && dados[j] < iter + h) {
					vetor[i]++;
				}
			}
			iter += h;
		}
		return vetor;
	}

	public String[] getValoresXi(int menor, int h, int k) {
		String vetor[] = new String[k];
		int iter = menor;
		for (int i = 0; i < k; i++) {
			vetor[i] = new DecimalFormat(Util.DUAS_CASAS).format((double) (iter + h + iter) / 2.0);
			iter += h;
		}
		return vetor;
	}

	public int[] getValoresFac(int[] vetFi, int k) {
		int vetor[] = new int[k];
		vetor[0] = vetFi[0];
		for (int i = 1; i < k; i++) {
			vetor[i] = vetor[i - 1] + vetFi[i];
		}
		return vetor;
	}

	public String[] getValoresFiPerc(int[] vetFi, int k, int n) {
		String vetor[] = new String[k];
		double soma = 0;
		int posMaior = 0;
		String maior = "0,0";
		for (int i = 0; i < k; i++) {
			double perc = (double) vetFi[i] / n * 100;
			vetor[i] = new DecimalFormat(Util.DUAS_CASAS).format(perc);

			if (getValorDouble(vetor[i]) > getValorDouble(maior)) {
				maior = vetor[i];
				posMaior = i;
			}
			soma += getValorDouble(vetor[i]);
		}
		String sumRound = new DecimalFormat(Util.DUAS_CASAS).format(soma);
		if (sumRound.replace('.', ',').equals("99,99")) {
			double val = getValorDouble(maior);
			val += 0.01;
			vetor[posMaior] = new DecimalFormat(Util.DUAS_CASAS).format(val);
		}
		if (sumRound.replace('.', ',').equals("100,01")) {
			double val = getValorDouble(maior);
			val -= 0.01;
			vetor[posMaior] = new DecimalFormat(Util.DUAS_CASAS).format(val);
		}
		return vetor;
	}

	public String[] getValoresFacR(String[] vetFiPerc, int k) {
		String vetor[] = new String[k];
		vetor[0] = vetFiPerc[0];
		for (int i = 1; i < k; i++) {
			vetor[i] = new DecimalFormat(Util.DUAS_CASAS)
					.format(getValorDouble(vetor[i - 1]) + getValorDouble(vetFiPerc[i]));
		}
		return vetor;
	}

	private Double getValorDouble(String valor) {
		return Double.parseDouble(valor.replace(',', '.'));
	}
	
	public double getValorFiXi(int[] fi, String[] xi) {
		int soma = 0;
		for (int i = 0; i < xi.length; i++) {
			soma += fi[i] * getValorDouble(xi[i]);
		}
		return soma;
	}
	
	public double getValorFiD2(String[] vetorXi, int[] vetorFi, String media) {
		double valor = 0;
		for (int i = 0; i < vetorXi.length; i++) {
			valor += vetorFi[i] * Math.pow(getValorDouble(vetorXi[i]) - getValorDouble(media), 2.0);
		}
		return valor;
	}

}
